<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    //Node 类用来表示节点，包含两个属性：element 用来保存节点上的数据，next 用来保存指向下一个节点的链接。
    function Node (element){
      this.element = element
      this.next = null
    }
    //LList 类提供了对链表进行操作的方法。该类的功能包括插入删除节点、在列表中查找给定的值。
    function LList() {
  　　this.head = new Node("head");
  　　this.find = find;
  　　this.insert = insert;
  　　this.display = display;
  　　this.findPrevious = findPrevious;
  　　this.remove = remove;
    }
    //find() 方法遍历链表，查找给定数据。如果找到数据，该方法就返回保存该数据的节点。
    //如果查找成功，该方法返回包含该数据的节点；否则，返回 null。
    function find(item) {
  　　var currNode = this.head;
  　　while (currNode.element != item) {
  　　　　currNode = currNode.next;
  　　}
  　　return currNode;
    }
    //insert() 方法在一个已知节点后面插入元素
    function insert(newElement, item) {
  　　var newNode = new Node(newElement);
  　　var current = this.find(item);
  　　newNode.next = current.next;
  　　current.next = newNode;
    }
    //display() 方法用来显示链表中的元素
    function display() {
　　  var currNode = this.head;
  　　while (!(currNode.next == null)) {
  　　　　print(currNode.next.element);
  　　　　currNode = currNode.next;
  　　}
    }
    // findPrevious() 方法找到待删除节点前面的节点。
    //找到这个节点后，修改它的 next 属性，使其不再指向待删除节点，而是指向待删除节点的下一个节点。
    function findPrevious(item) {
  　　var currNode = this.head;
  　　while (!(currNode.next == null) && (currNode.next.element != item)) {
  　　　　currNode = currNode.next;
  　　}
  　　return currNode;
    }

    //remove() 方法从链表中删除节点。
    function remove(item) {
  　　var prevNode = this.findPrevious(item);
  　　if (!(prevNode.next == null)) {
  　　　　prevNode.next = prevNode.next.next;
  　　}
    }
    // findLast() 方法查找链表中的最后一个节点，避免了从前往后遍历链表
    function findLast() {
    　　var currNode = this.head;
    　　while (!(currNode.next == null)) {
    　　　　currNode = currNode.next;
    　　}
    　　return currNode;
    }
    // dispReverse() 方法反序显示双向链表中的元素。
    function dispReverse() {
    　　var currNode = this.head;
    　　currNode = this.findLast();
    　　while (!(currNode.previous == null)) {
    　　　　console.log(currNode.element);
    　　　　currNode = currNode.previous;
    　　}
    }

    // console.log(new LList())

    function insert(arr, index, data) {
      for (let i = arr.length; i >index; i--) {
        console.log(i,arr[i-1])
        // arr[i] = arr[i - 1];
      }
      // arr[index] = data;
    }
    var a = [1,2,3]
    insert(a,2,9)
    console.log(a)
  </script>
</body>
</html>